package org.example.edusmart.dao;

import org.apache.ibatis.annotations.Mapper;
import org.example.edusmart.pojo.UserPojo;
import org.example.edusmart.pojo.UserRolePojo;
import org.example.edusmart.request.admin.RoleListPojo;
import org.example.edusmart.request.admin.UserInfoPojo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Mapper
public interface UserDao {
    //

    /**
     * 根据用户名查询员工
     *
     * @param username 用户名
     */
    UserPojo getUserByUsername(String username);

    /**
     * 根据邮箱查到系统是否已经存在该邮箱
     *
     * @param email 邮箱
     */
    UserPojo getUserByEmail(String email);

    /**
     * 创建用户
     *
     * @param insertParameter 前端传相应值
     */
    void creatUser(Map<String, Object> insertParameter);

    /**
     * 将用户id插入用户角色表
     *
     * @param userRole 用户id以及角色id
     */
    void insertUserRole(UserRolePojo userRole);

    /**
     * 通过用户名和邮箱查找用户并插入对应学工号
     *
     * @param number 学工号
     */
    void insertNumberByUsernameAndEmail(HashMap<String, Object> number);

    /**
     * 查询用户的权限信息
     * @param userID 用户Id
     */
    List<String> getPermissionByUserId(Integer userID);

    /**
     * 根据用户id查指定用户
     * @param userId 用户id
     */
    UserPojo getUserByUserId(String userId);

    /**
     * 替换用户密码
     * @param newPassword 新密码
     */
    void changeUserPassword(HashMap<String, Object> newPassword);

    /**
     * 通过用户名与邮箱查找指定用户并修改该用户个人信息
     * @param info 修改信息内容
     */
    void changeUserInfoByUsernameAndEmail(HashMap<String,Object> info);

    /**
     * 通过用户名或者学工号返回用户表用户的头像，姓名学工号，身份（从用户角色表中获取）
     * @param userInfoPojo 入参
     * @return 信息列表
     */
    List<HashMap<String,Object>> getUserByUsernameOrNumber(UserInfoPojo userInfoPojo);

    /**
     * 根据用户id查找对应用户并修改身份
     * @param info id
     */
    Integer changeUserRoleByUserid(HashMap<String,Object> info);

    /**
     * 查除指定用户外的其他角色名
     * @param roleListPojo 学工号
     * @return 角色信息
     */
    List<HashMap<String,Object>> getRoleNameByNumber(RoleListPojo roleListPojo);

    /**
     * 根据用户id查找当前用户身份
     * @param userId id
     * @return 用户身份
     */
    String getUserRoleByUserId(String userId);
}
